package org.overmind.ieat.server.logic.locale;

import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author eugene.karanda
 */
@Service
public class LocaleManagerImpl implements LocaleManager {
    private List<Locale> availableLocales;
    private Locale defaultLocale;

    public Locale getDefaultLocale() {
        return defaultLocale;
    }

    public List<Locale> getAvailableLocales() {
        return new ArrayList<>(availableLocales);
    }

    public void setDefaultLocale(Locale defaultLocale) {
        this.defaultLocale = defaultLocale;
    }

    public void setAvailableLocales(List<Locale> availableLocales) {
        this.availableLocales = availableLocales.stream()
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
    }

    public Locale checkUserLocale(Locale userLocale) {
        for (Locale availableLocale : availableLocales) {
            if(availableLocale.equals(userLocale)) {
                return availableLocale;
            }
        }

        for (Locale availableLocale : availableLocales) {
            if(availableLocale.getLanguage().equals(userLocale.getLanguage())) {
                return availableLocale;
            }
        }

        return null;
    }

    @Override
    public Locale getPreferredLocale(List<Locale> userLocales) {
        for (Locale userLocale : userLocales) {
            Locale locale = checkUserLocale(userLocale);

            if (locale != null) {
                return locale;
            }
        }

        return defaultLocale;
    }
}
